#include "List.h"
#include "SqList.h"
#include "LinkList.h"
#include "LinkList2.h"
#include "CycleLinkList.h"

#define TEST 1

static void ListHandlerTest(void)
{
    List *list = new CycleLinkList;

    list->InitList();

    /* 测试插入 */
    for(int j = 1; j <= 5; j++)
        list->ListInsert(0, j);

    for(int j = 1; j <= 10; j++)
        list->ListInsert(j, j);

    list->ListTraverse();

    /* 测试前驱 */
    for(int j = 0; j <= 2; j++) {
        ElemType e, e0;
        /* 把第j个数据赋给e0 */
        list->GetElem(j, &e0);
        /* 求e0的前驱, 保存在e中 */
        int i = list->PriorElem(e0, &e);
        if(i == FALSE)
            printf("元素%d无前驱\n",e0);
        else
            printf("元素%d的前驱为:%d\n", e0, e);
    }

    /* 测试后继 */
    for(int j = 1; j < list->ListLength(); j++) {
        ElemType e, e0;
        /* 把第j个数据赋给e0 */
        list->GetElem(j, &e0);
        /* 求e0的后继 */
        int i = list->NextElem(e0, &e);
        if(i==FALSE)
            printf("元素%d无后继\n",e0);
        else
            printf("元素%d的后继为: %d\n", e0, e);
    }

    /* 删除元素测试 */
    int k = list->ListLength();
    for(int j = k+1; j >= k; j--) {
        ElemType e;
        /* 删除第j个数据 */
        int i = list->ListDelete(j, &e);
        if(i==ERROR)
            printf("删除第%d个数据失败\n",j);
        else
            printf("删除的元素值为：%d\n",e);
    }

    list->ListTraverse();

    /* 销毁链表 */
    list->DestoryList();

    if (list)
        delete list;
}

static void listAlgoTest(void)
{
    List *listA = new SqList;
    List *listB = new SqList;

    listA->InitList();
    listB->InitList();


    /* 插入 1 2 3 4 5 */
    for(int j = 1; j <= 5; j++)
        listA->ListInsert(0, j);

    listA->ListTraverse();

    /* 插入 10 11 12 13 15 */
    for(int j = 2; j <= 6; j++)
        listB->ListInsert(0, j+10);

    listB->ListTraverse();

    listA->ListMerge(listB);

    listA->ListTraverse();

    delete listA;
    delete listB;

}

#ifdef TEST
int main(int argc, char **argv)
{

    ListHandlerTest();
    // listAlgoTest();
    return 0;
}

#endif